package 创建型模式.工厂模式;

/**
 * @author 康米
 * @date 2023/2/17  16:45
 */
public class Test {

    public static void main(String[] args) {
        //工厂模式
        //意图：定义一个创建对象的接口，让其子类自己选择实例化哪个工厂类，工厂模式使其创建过程延迟到子类进行
        //解决：解决接口选择的问题

        //优点：
        //调用者想创建一个对象，只需要知道其名称就可以了
        //扩展性高，增加一个产品，增加一个工厂类就行了
        //屏蔽产品的具体实现

        //缺点：
        //每增加一个产品时，就会增加一个具体的类，增加了系统的复杂度

        //注：
        //在任何需要生成复杂对象的地方，都可以使用工厂方法模式
        //复杂对象适合使用工厂模式，而简单对象，特别是只需要通过new就可以完成创建的对象，无需使用工厂模式

        //使用该工厂
        AnimalFactory animalFactory = new AnimalFactory();

        //通过工厂，获取cat对象
        Animal cat = animalFactory.getAnimal("cat");
        cat.eat();

        //通过工厂，获取dog对象
        Animal dog = animalFactory.getAnimal("dog");
        dog.eat();

    }
}
